3. 编码格式
位图中的范围是 [msb:lsb]。opcode、fN 等固定字段由 YAML 指令项决定;没有作为操作数或固定字段的位必须为零。
| 格式 | 宽度 | 位图(高位到低位) | 用途 |
|---|---|---|---|
R | 32 | f4[31:28] rs2[27:21] rs1[20:14] rd[13:7] opcode[6:0] | 三向量源。 |
RU | 32 | f5[31:27] rs2[26:21] rs1[20:14] rd[13:7] opcode[6:0] | 向量加 uniform 源。 |
I8 | 32 | imm[31:24] f3[23:21] rs1[20:14] rd[13:7] opcode[6:0] | 8-bit 立即数。 |
R1 | 32 | f11[31:21] rs1[20:14] rd[13:7] opcode[6:0] | 向量一元。 |
R1U | 32 | f12[31:20] rs1[19:14] rd[13:7] opcode[6:0] | 向量目的、uniform 源。 |
LI | 32 | imm[31:14] rd[13:7] opcode[6:0] | 向量立即数。 |
C | 32 | f5[31:27] rs2[26:20] rs1[19:13] rd[12:7] opcode[6:0] | 向量到 uniform 比较/归约。 |
CU | 32 | f6[31:26] rs2[25:20] rs1[19:13] rd[12:7] opcode[6:0] | 向量加 uniform 到 uniform。 |
CI | 32 | imm[31:24] f4[23:20] rs1[19:13] rd[12:7] opcode[6:0] | uniform 结果加立即数。 |
UR | 32 | f7[31:25] rs2[24:19] rs1[18:13] rd[12:7] opcode[6:0] | 三 uniform 源。 |
UI | 32 | imm[31:22] f3[21:19] rs1[18:13] rd[12:7] opcode[6:0] | uniform + 10-bit 立即数。 |
U1 | 32 | f13[31:19] rs1[18:13] rd[12:7] opcode[6:0] | uniform 一元/EXEC/片段控制。 |
ULI | 32 | imm[31:15] f2[14:13] rd[12:7] opcode[6:0] | uniform 立即数或 PC 相对值。 |
J | 32 | imm[31:10] f3[9:7] opcode[6:0] | 无条件 PC 相对跳转。 |
JL | 32 | imm[31:13] rd[12:7] opcode[6:0] | 跳转并链接。 |
B | 32 | imm[31:15] f2[14:13] rs1[12:7] opcode[6:0] | uniform 条件分支。 |
JR | 32 | imm[31:22] f3[21:19] rs1[18:13] rd[12:7] opcode[6:0] | 间接跳转/返回。 |
SYS | 32 | imm[31:12] f5[11:7] opcode[6:0] | 系统、屏障、cache 控制。 |
WAIT | 32 | sm[31:30] sfu[29:27] ls[26:23] vst[22:18] tex[17:13] vm[12:7] opcode[6:0] | 多计数器 waitcnt。 |
CSR | 32 | csr[31:22] f3[21:19] rs1[18:13] rd[12:7] opcode[6:0] | CSR 访问。 |
X | 64 | z[63:55] sat[54] abs[53:51] neg[50:48] rm[47:45] f10[44:35] rs3[34:28] rs2[27:21] rs1[20:14] rd[13:7] opcode[6:0] | 三源 VALU 与 FP 修饰。 |
XL | 64 | imm[63:32] f11[31:21] rs1[20:14] rd[13:7] opcode[6:0] | VALU + 32-bit literal。 |
H | 64 | z[63:59] sat[58] abs[57:55] neg[54:52] rm[51:49] f10[48:39] rs3[38:31] rs2[30:23] rs1[22:15] rd[14:7] opcode[6:0] | half/b16 VALU。 |
HC | 64 | z1[63:41] f10[40:31] rs2[30:23] rs1[22:15] z0[14:13] rd[12:7] opcode[6:0] | half 比较到 uniform 掩码。 |
UL | 64 | imm[63:32] f13[31:19] rs1[18:13] rd[12:7] opcode[6:0] | uniform + 32-bit literal。 |
M | 64 | imm[63:40] f2[39:38] cpol[37:35] sp[34:32] f5[31:27] rs2[26:21] rs1[20:14] rd[13:7] opcode[6:0] | 向量内存。 |
UM | 64 | z[63:59] cpol[58:56] imm[55:32] f7[31:25] rs2[24:19] rs1[18:13] rd[12:7] opcode[6:0] | uniform 标量内存。 |
T | 64 | toff[63:52] z[51:50] d16[49] a16[48] rsd[47] voff[46] dmask[45:42] dim[41:38] rs3[37:32] f5[31:27] rs2[26:21] rs1[20:14] rd[13:7] opcode[6:0] | texture/image。 |
立即数类型、缩放、对齐和枚举值以 YAML operand_kinds 为准;例如 br22/br19/br17 是有符号且左移 2 的 PC 相对偏移,toff7 是以 4 字节为单位的 tile 偏移,rm 支持 rne、rtz、rdn、rup、rmm、dyn。